home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 015 / fflf.arc / FFLF.ASM next >
Assembly Source File  |  1995-02-15  |  7KB  |  131 lines

  1. ; FFLF.COM    Version 4.0
  2. ; Memory-resident program to send form feed and line feed 
  3. ;    characters to printer
  4. ;        Alt-PrtSc = form feed
  5. ;        Alt-/     = line feed
  6. ; Includes installation messages
  7. ; Checks printer status, beeps if printer not ready
  8.  
  9. ; Written in CHeap ASseMbler format by :
  10. ;       L. R. Holliday
  11. ;       218 Virginia
  12. ;       Ponca City, Oklahoma 74601
  13.  
  14. fflf          proc      far
  15.               jmp       set_up         ; Jump to initialize
  16. addr_bx       ds        2,0            ; Space to store KBINT offset
  17. addr_es       ds        2,0            ; Space to store KBINT segment
  18. kbint         sti                      ; Interrupts on
  19.               push      ax             ; Store registers
  20.               push      dx             ;    AX and DX
  21.               mov       dx,0000h       ; Select printer 1
  22.               mov       ah,02          ; Get shift state
  23.               int       16h            ;    through BIOS
  24.               test      al,04          ; Is Ctrl key pressed ?
  25.               jnz       exit           ; If so, jump to exit
  26.               test      al,03          ; Is a Shift key pressed ?
  27.               jnz       exit           ; If so, jump to exit
  28.               test      al,08          ; Is Alt key pressed ?
  29.               jz        exit           ; If not, jump to exit
  30.               in        al,60h         ; If so, get key scan code
  31.               cmp       al,37h         ; Is it PrtSc Key ?
  32.               jz        formfeed       ; If so, jump to Formfeed
  33.               cmp       al,35h         ; Is it / Key ?
  34.               jz        linefeed       ; If so, jump to Linefeed
  35.               jmps      exit           ; If none of above, jump to exit
  36. formfeed      call      lptstat
  37.               jb        beep
  38.               mov       ax,000ch       ; Put Formfeed character in AL
  39.               int       17h            ; Send to printer
  40.               jmps      kb_reset       ; Jump to KeyBoard Reset
  41. linefeed      call      lptstat
  42.               jb        beep
  43.               mov       ax,000ah       ; Put Linefeed character in AL
  44.               int       17h            ; Send to printer
  45.               jmps      kb_reset       ; Jump to KeyBoard Reset
  46. beep          mov       ah,182
  47.               out       67,al
  48.               mov       al,0
  49.               out       66,al
  50.               mov       al,6
  51.               out       66,al
  52.               in        al,97
  53.               or        al,3
  54.               out       97,al
  55.               mov       cx,6000h
  56. beep1         loop      beep1
  57.               in        al,97
  58.               and       al,252
  59.               out       97,al
  60. kb_reset      in        al,61h         ; These instructions reset the
  61.               mov       ah,al          ;     keyboard
  62.               or        al,80h         ;       ......
  63.               out       61h,al         ;       ......
  64.               mov       al,ah          ;       ......
  65.               out       61h,al         ;       ......
  66.               cli                      ; Turn interrupts off
  67.               mov       al,20h         ; Send End-of-Interrupt
  68.               out       20h,al         ;      signal
  69.               pop       dx             ; Restore registers
  70.               pop       ax             ;     DX and AX
  71.               iret                     ; Return to interrupted program
  72. lptstat       proc      near
  73.               mov       ah,02          ; check printer status
  74.               int       17h
  75.               cmp       ah,90h         ; is printer on-line ?
  76.               jz        stat1          ; if so, then no error
  77.               stc                      ; raise error flag
  78.               ret
  79. stat1         clc                      ; clear error flag
  80.               ret
  81.               endp
  82. exit          pop       dx             ; Restore registers
  83.               pop       ax             ;     DX and AX
  84.               seg       cs             ; cs:
  85.               jmpf      addr_bx        ; Return to BIOS KBINT
  86. set_up        mov       ah,30h         ; Check DOS Version
  87.               int       21h
  88.               cmp       al,2           ; Is it 2 or higher ?
  89.               jae       check_install  ; If so, check for prior installation
  90.               mov       dx,offset(err_msg2)
  91.               jmps      msg_exit       ; If not, issue error message
  92. check_install mov       ax,0
  93.               mov       es,ax
  94.               seg       es             ; es:
  95.               cmpw      [04f3h],4444h  ; Already installed ?
  96.               jnz       install        ; If not, install
  97.               mov       dx,offset(err_msg1)
  98.               jmps      msg_exit       ; If not, issue error message
  99. install       seg       es             ; es:
  100.               movw      [04f3h],4444h  ; Set flag
  101.               mov       ax,3509h       ; Get BIOS KBINT address through
  102.               int       21h            ;     DOS GET_VECTOR service
  103.               mov       addr_bx,bx     ; Store offset and
  104.               mov       addr_es,es     ;     segment in spaces allocated
  105.               mov       dx,offset(kbint)    ; Address of new KBINT
  106.               mov       ax,2509h       ; Set vector to new KBINT
  107.               int       21h            ;     through DOS SET_VECTOR service
  108.               mov       dx,offset(inst_msg)
  109.               mov       ah,9           ; Display installation message
  110.               int       21h
  111.               mov       dx,offset(set_up) ; Address of end of resident code
  112.               int       27h            ; Terminate, but stay resident
  113. msg_exit      mov       ah,9           ; Display error message
  114.               int       21h
  115.               int       20h            ; Terminate
  116. end           endp
  117.  
  118. inst_msg      db  0dh,0ah,'    F F L F            Version  4.0',0dh,0ah
  119.               db  0dh,0ah,'    Printer FormFeed and LineFeed Program',0dh,0ah
  120.               db  0dh,0ah,'    Memory-Resident Portion Installed',0dh,0ah
  121.               db  0dh,0ah,'Press  Alt-PrtSc to Send FormFeed to Printer',0dh,0ah
  122.               db  0dh,0ah,'Press  Alt-/     to Send LineFeed to Printer',0dh,0ah,'$'
  123.  
  124. err_msg1      db  0dh,0ah,'    F F L F            Version  4.0',0dh,0ah
  125.               db  0dh,0ah,'    Printer FormFeed and LineFeed Program',0dh,0ah
  126.               db  07,0dh,0ah,'    --- Already Installed ---',0dh,0ah,'$'
  127.  
  128. err_msg2      db  0dh,0ah,'    F F L F            Version  4.0',0dh,0ah
  129.               db  0dh,0ah,'    Printer FormFeed and LineFeed Program',0dh,0ah
  130.               db  07,0dh,0ah,'    --- Wrong Dos Version ---',0dh,0ah,'$'
  131.